package cn.jji8.QSGUI.quick.tool;

import cn.jji8.QSGUI.quick.logger.Logger;
import org.bukkit.configuration.file.YamlConfiguration;

import java.io.File;
import java.io.IOException;

/**
 * 简化配置文件的读取，和修复
 * 可以使用默认参数获取配置，配置文件中没有指定参数，会使用默认参数并且保存
 * */
//刚写完，其他类还没有使用
public class Config {
    YamlConfiguration configfile;
    File file;
    /**
     * 通过文件路径构造一个配置
     * */
    public Config(File 配置路径){
        configfile = YamlConfiguration.loadConfiguration(配置路径);
        this.file = 配置路径;
    }
    public int get(String key,int 默认参数){
        if(configfile.contains(key)){
           return configfile.getInt(key);
        }
        configfile.set(key,默认参数);
        saveAsynchronous();
        return 默认参数;
    }
    public String get(String key,String 默认参数){
        if(configfile.contains(key)){
            return configfile.getString(key);
        }
        configfile.set(key,默认参数);
        saveAsynchronous();
        return 默认参数;
    }
    public double get(String key,double 默认参数){
        if(configfile.contains(key)){
            return configfile.getDouble(key);
        }
        configfile.set(key,默认参数);
        saveAsynchronous();
        return 默认参数;
    }
    public YamlConfiguration getYml(){
        return configfile;
    }
    long 执行时间=-1;
    /**
     * 异步保存数据，但不会频繁重复保存
     * 在指定时间多次调用此方法，前面的调用无效
     * 时间/秒；
     * */
    public void saveAsynchronous(){
        if(执行时间==-1){
            Thread T = new Thread(){
                @Override
                public void run() {
                    while (true){
                        try {
                            sleep(1000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                        if(System.currentTimeMillis()>执行时间){
                            serve();
                            执行时间 = -1;
                            return;
                        }
                    }
                }
            };
            执行时间 = System.currentTimeMillis()+10*1000;
            T.start();
        }else {
            执行时间 = System.currentTimeMillis()+10*1000;
        }
    }
    /**
     * 异步保存配置
     * */
    public void Threadserve(){
        Thread T = new Thread(()->{
                serve();
        });
        T.setName("配置保存线程");
        T.start();
    }
    /**
     * 线程安全的保存
     * */
    public synchronized void serve(){
        try {
            configfile.save(file);
        } catch (IOException e) {
            e.printStackTrace();
            Logger.putWarning("配置文件保存失败！");
        }
    }
    /**
     * 重新加载配置
     * */
    public void reload(){
        configfile = YamlConfiguration.loadConfiguration(file);
    }
}
